package com.yhm.pagination;

import java.io.DataInputStream;
import java.util.UUID;

import org.apache.log4j.Logger;

/**分页标签内容生成*/
public class PageTagUtil {
	
	private Logger logger=Logger.getLogger(getClass());
	private PageUtil pageUtil;
	private String pagerUrl;
	private String name="";//分页标签的属性名称
	private String includes="";	//get传递参数的，以逗号隔开
	private String pagerForm="";//post传递参数时使用的查询表单名称
	private Integer seaJS=0;    //是否使用seaJs包装.缺省不使用.直接使用Jquery	
	public PageTagUtil(PageUtil pageUtil,String pagerUrl,String pagerForm,String includes,Integer seaJS,String name){	
		this.pageUtil=pageUtil;
		this.pagerUrl=pagerUrl;
		this.pagerForm=pagerForm;
		this.includes=includes;
		this.seaJS=seaJS;
		this.name =name;
	}
	/**
	 * @param url上一页，下一页连接的地址
	 * @param uuid 作为分页标签的唯一ID*/
	public String getTools2(String url,String uuid){
		logger.debug("请求地址:"+url);
		String tmpUrl=url;
		StringBuffer str=new StringBuffer("");
		str.append(String.format("<div class='%s'>",uuid));		
		if (getPageUtil().getTotalPage()>=1 ) {//总页数必须大于等于1
			str.append(String.format("<span>共%d条记录</span>", getPageUtil().getTotalCount()));	
			//1.当前页等于1时(首页，第一页、1的显示情况)
			if (getPageUtil().getCurrentPage() == 1) { //当前页为第一页
				str.append("<span class='disabled'>首页</span>");
				str.append("<span class='disabled'>前一页</span>");
			}else {//当前页大于1时(首页，第一页、(1就不一定要显示了)的显示情况)	
				tmpUrl=(getPagerUrl()!=null&&getPagerUrl().length()>0)?String.format(url,getPageUtil().getFirstPage()):url;				
				str.append(String.format("<a href='%s' title='%d'>首页</a>", tmpUrl,getPageUtil().getFirstPage()));
				
				tmpUrl=(getPagerUrl()!=null&&getPagerUrl().length()>0)?String.format(url,getPageUtil().getPrevPage()):url;				
				str.append(String.format("<a href='%s' title='%d'>前一页</a>",tmpUrl,getPageUtil().getPrevPage()));
			}
			//2.1 根据当前页计算要显示的起始和终止页数.1(超过5个按5个显示,不足5个全部显示)	
			int start=1,end=1;
			if(getPageUtil().getTotalPage()<=5){ //总页数小于5,全部显示出来.
				start=getPageUtil().getFirstPage();
				end=getPageUtil().getLastPage();
			}else{    //1.总页数大于5.
				if(getPageUtil().getCurrentPage()<=2){//总页数大于5.当当前页小于2,那么显示前5条.
					start=getPageUtil().getFirstPage();
					end=5;
				}else if(getPageUtil().getCurrentPage()>getPageUtil().getTotalPage()-2){//总页数大于5.当前页+2已经大于总页数了。取最后5条
					start=getPageUtil().getLastPage()-4;
					end=getPageUtil().getLastPage();
				}else { //2.总页数大于5.取当前页的前后两条
					start=getPageUtil().getCurrentPage()-2;
					end=getPageUtil().getCurrentPage()+2;
				}
			}
			//2.当前页等于中间页数的情况1 < current < totalPage.只显示当前页附近的5页,小于5页，有几页显示几页
			for (int i = start; i <= end; i++) {
				 if (getPageUtil().getCurrentPage() == i) { // 当前页要加粗显示
   				    str.append(String.format("<span class='current' title='%d'>%d</span>", i,i));
				 }else {
				   tmpUrl=(getPagerUrl()!=null&&getPagerUrl().length()>0)?String.format(url,i):url;		
				   str.append(String.format("<a href='%s' title='%d'>%d</a>",tmpUrl,i,i));
			   }
			}
			//3.当前页等于总页数时(后一页、末页的显示情况
			if (getPageUtil().getCurrentPage() ==  getPageUtil().getTotalPage()) { //当前页为最后一页
				str.append("<span class='disabled'>后一页</span>");
				str.append("<span class='disabled'>末页</span>");
			}else {
				tmpUrl=(getPagerUrl()!=null&&getPagerUrl().length()>0)?String.format(url,getPageUtil().getNextPage()):url;		
				str.append(String.format("<a href='%s' title='%d'>后一页</a>", tmpUrl,getPageUtil().getNextPage()));
				tmpUrl=(getPagerUrl()!=null&&getPagerUrl().length()>0)?String.format(url,getPageUtil().getLastPage()):url;
				str.append(String.format("<a href='%s' title='%d'>末页</a>", tmpUrl,getPageUtil().getLastPage()));
			}
			str.append(String.format("<span>当前[%d/%d]页</span>", getPageUtil().getCurrentPage(),getPageUtil().getTotalPage()));
		}
		str.append("</div>");
		return str.toString();
	}
	/**通过传递进来的窗体进行提交数据参数
	 * 增加分页插件的单机事件
	 * 如果指定了表参数，则把表单为表单指定参数，并提交表单
	 * 如果没有指定表单则以get方式提交参数，可能存在中文参数问题
	 * 只要通过修改tomcat的server.xml文件的Service标签下的子标签Connector，增加一个属性 URIEncoding="UTF-8"*/
	public String getTools3(String url){
		StringBuffer str=new StringBuffer("");
		String uuid="A"+UUID.randomUUID().toString().replace("-", "").toUpperCase();//随机样式名称.唯一区分
		str.append(getTools2(url,uuid));
		if(getPagerForm()!=null&&getPagerForm().length()>0){		   	
		   String jsStr="";
		   if(getSeaJS()==0){
			   jsStr=readScriptFile("pagination1.js");//使用原生Jquery
		   }else {
			   jsStr=readScriptFile("pagination2.js");//使用seaJs模块
		   }
		   jsStr=String.format(jsStr,uuid,getPagerForm(),getName(),getPageUtil().getPageSize(),getName(),getPagerForm(),getIncludes());
		   str.append(jsStr);
		}
		return str.toString();
	}
	
	/**读取脚本文件
	 *@param fileName 读取的文件名
	 **/
	public String readScriptFile(String fileName){
		DataInputStream in=new DataInputStream(getClass().getClassLoader().getResourceAsStream(fileName));
		byte[] buf=null;
		try {
			buf=new byte[in.available()];
			in.readFully(buf);
		} catch (Exception e) {
			logger.debug("数据输出流:",e);
			e.printStackTrace();
		}
		return new String(buf);
	}
	public PageUtil getPageUtil() {
		return pageUtil;
	}
	public void setPageUtil(PageUtil pageUtil) {
		this.pageUtil = pageUtil;
	}
	public String getPagerUrl() {
		return pagerUrl;
	}
	public void setPagerUrl(String pagerUrl) {
		this.pagerUrl = pagerUrl;
	}
	public String getPagerForm() {
		return pagerForm;
	}
	public void setPagerForm(String pagerForm) {
		this.pagerForm = pagerForm;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getIncludes() {
		return includes;
	}
	public void setIncludes(String includes) {
		this.includes = includes;
	}
	public Integer getSeaJS() {
		return seaJS;
	}
	public void setSeaJS(Integer seaJS) {
		this.seaJS = seaJS;
	}
}
